package com.lingying.caiwudailikehudaun.utils.aLiYunShiBie;

import sun.misc.BASE64Encoder;

import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.HashMap;

/**
 * 通过访问阿里云接口
 * 来识别月度统计图片
 * 将返回结果进行数据处理
 * 并返回给调用方
 * 调用结果
 * {
 * //图像数据：base64编码，要求base64编码后大小不超过4M，最短边至少15px，最长边最大4096px，支持jpg/png/bmp格式，和url参数只能同时存在一个
 * "img": "",
 * //图像url地址：图片完整URL，URL长度不超过1024字节，URL对应的图片base64编码后大小不超过4M，最短边至少15px，最长边最大4096px，支持jpg/png/bmp格式，和img参数只能同时存在一个
 * "url": "",
 * //是否需要识别结果中每一行的置信度，默认不需要。 true：需要 false：不需要
 * "prob": false,
 * //是否需要单字识别功能，默认不需要。 true：需要 false：不需要
 * "charInfo": false,
 * //是否需要自动旋转功能，默认不需要。 true：需要 false：不需要
 * "rotate": false,
 * //是否需要表格识别功能，默认不需要。 true：需要 false：不需要
 * "table": false,
 * //字块返回顺序，false表示从左往右，从上到下的顺序，true表示从上到下，从左往右的顺序，默认false
 * "sortPage": false
 * }
 */
public class GongSiJiBenXinXiShiBieUtil {

    /**
     * 通过传递网络图片的url来进行识别
     *
     * @return
     */
    public HashMap<String, Object> shiBieWangLuoTuPian(String imgUrl) {
        String url = "https://ocrapi-advanced.taobao.com/ocrservice/advanced";
        //    青林的AppCode
//        String  appcode = "333eecb7db68430b989a886c049ae9f2";
        //    安旭斌的AppCode
        String  appcode = "d482d1cfede74d22be8b5e0f4233e8bb";

        HashMap<String, Object> object = new HashMap<String, Object>();
        HashMap<String, String> headers = new HashMap<String, String>();
        headers.put("Authorization", "APPCODE " + appcode);
        //根据API的要求，定义相对应的Content-Type
        headers.put("Content-Type", "application/json; charset=UTF-8");
        String tuPingUrl=getBase64(imgUrl);
        try {
            // 本地文件路径
//            String filePath = "C:\\Users\\M\\Desktop\\技术2月截图\\基本信息\\A1508 郑州蓝码机电科技有限公司_登记信息.png";
//            byte[] imgData = FileUtil.readFileByBytes(filePath);
//            String tuPingUrl = Base64Util.encode(imgData);
            //如果需要使用本地图片，需要将图片base64码放在img后面，如果使用网络图片，则需要将网络图片url放于url参数后面
            String bodys = "{'img':'"+tuPingUrl+"','prob':false,'charInfo':false,'rotate':false,'table':false}";
//            String bodys = "{'img':'"+imgParam+"','url':'','prob':false,'charInfo':false,'rotate':false,'table':true}";

            /**
             * 重要提示如下:
             * HttpClientUtils请从
             * https://gitee.com/duguangdemo/publicclouddemo/blob/master/src/main/java/util/HttpClientUtils.java
             * 下载
             * HttpExecuteResponse请从
             * https://gitee.com/duguangdemo/publicclouddemo/blob/master/src/main/java/util/HttpExecuteResponse.java
             * 下载
             *
             * 相应的依赖请参照
             * https://gitee.com/duguangdemo/publicclouddemo/blob/master/pom.xml
             */
            HttpExecuteResponse response = HttpClientUtils.doPost(url, bodys, headers);
            System.out.println("结果");
            System.out.println(response.getResponseAsString());
            System.out.println("------------------------------------------------------>>>>>");
            // 当识别失败时返回
            if ("".equals(response.getResponseAsString())) {
                object.put("code", "400");
                object.put("msg", "解析失败");
                return object;
            }
            // 将识别出来的结果进行处理
            object.put("code","200");
            object.put("data",response.getResponseAsString());
            //需要检查response的headers信息时可用以下代码,方便排查问题用
            //for (Object json : response.getHeaders()) {
            //    System.out.println(json);
            //}
            return object;
        } catch (Exception e) {
            e.printStackTrace();
        }

        return object;
    }

    /**
     * 将oss路径转换为base64
     * @param imgURL
     * @return
     */
    private String getBase64(String imgURL) {
        InputStream in = null;
        final ByteArrayOutputStream data = new ByteArrayOutputStream();
        //读取图片字节数组
        try {
            URL url = new URL(imgURL);
            final byte[] by = new byte[1024];
            // 创建链接获取图片
            final HttpURLConnection conn = (HttpURLConnection) url.openConnection();
            conn.setRequestMethod("GET");
            conn.setConnectTimeout(5000);
            in = conn.getInputStream();
            int len = -1;
            while ((len = in.read(by)) != -1) {
                data.write(by, 0, len);
            }
            in.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
        //对字节数组Base64编码
        BASE64Encoder encoder = new BASE64Encoder();
        //返回Base64编码过的字节数组字符串
        String encode = encoder.encode(data.toByteArray());
        encode = encode.replaceAll("[\\s*\t\n\r]", "");
        return encode;
    }

//    public static void main(String[] args) {
//        HashMap<String, Object> map = GongSiJiBenXinXiShiBieUtil.shiBieWangLuoTuPian();
//        HashMap<String, Object> map1 = JSON.parseObject(map.get("data").toString(), HashMap.class);
//
//        System.out.println();
//    }
}
